/**
 * This file is used specifically for security reasons.
 * Here you can access Nodejs stuff and inject functionality into
 * the renderer thread (accessible there through the "window" object)
 *
 * WARNING!
 * If you import anything from node_modules, then make sure that the package is specified
 * in package.json > dependencies and NOT in devDependencies
 *
 * Example (injects window.myAPI.doAThing() into renderer thread):
 *
 *   import { contextBridge } from 'electron'
 *
 *   contextBridge.exposeInMainWorld('myAPI', {
 *     doAThing: () => {}
 *   })
 *
 * WARNING!
 * If accessing Node functionality (like importing @electron/remote) then in your
 * electron-main.ts you will need to set the following when you instantiate BrowserWindow:
 *
 * mainWindow = new BrowserWindow({
 *   // ...
 *   webPreferences: {
 *     // ...
 *     sandbox: false // <-- to be able to import @electron/remote in preload script
 *   }
 * }
 */

import { contextBridge,ipcRenderer  } from 'electron'
import { BrowserWindow } from '@electron/remote'
import { Channel } from './channel/channel'
// BrowserWindow.getFocusedWindow().close()
// console.log('这里是预加载脚本')

function getIpcRenderer() {
  let IpcRenderer:any = {}
  let channelObject = new Channel();
  Object.getOwnPropertyNames(Object.getPrototypeOf(channelObject))
    .forEach((channel:string) => {
      IpcRenderer[channel] = (...args:any)=> {
        ipcRenderer.send(channel, ...args)
      }
    })
  return IpcRenderer
}

contextBridge.exposeInMainWorld('ipcEvent', {
  openNewWin:(url:string)=>{
    ipcRenderer.send('openNewWin',url)
  }
})

contextBridge.exposeInMainWorld('ipcChannel', {
  ...getIpcRenderer(),
  openCallingWindow:(url:string)=>{
    ipcRenderer.send('openCallingWindow',url)
  },
  getSysStorage:()=>{
    return ipcRenderer.invoke('getSysStorage')
  }
})

